import Vue from 'vue'
import {baseService,arrayTools} from '@/service/common/baseService'
import tools from '@/service/common/tools'
import FormValidator from './formValidator'
/**
 * 校验处理入口
 */
function activeValidate(value,validate){
	var validateJson = validate ? validate : {};
	// 执行校验
  return new Promise((resolve,reject) => {
    var validity = validRules(value,validateJson);
    // 验证通过
    validity.then((res) => {resolve(res)})
    // 验证不通过，返回错误信息
    validity.catch((err) => {reject(err)})
  })
}

/**
 * 校验入口
 * @param value
 * @param validRule
 * @returns
 */
async function validRules(value,validRule){
  return new Promise(async (resolve,reject) => {
    value = value == null ? "" : value+"";

    if(typeof value == 'string'){
    	value = value.trim();
    }
    // 获取json。
    var json = validRule;
    if(typeof json == 'string') {
    	json = eval('(' + validRule + ')');
    }
    var isRequired = json.required ? true : false;

    // 非必填的字段且值为空 那么直接返回成功。
    if ((isRequired == false || isRequired == undefined) && value == ""){
    	resolve(true);
      return
    }

    //number：true将number取消格式化
    if(json.number){
    	value =Vue.tools.toNumber(value)+"";
    }

    // 遍历json规则。
    var validates=[] ;
    for (var name in json) {
    	var validValue = json[name];
    	validates.push({
    			ruleName:name,// 规则名称
    			validValue:validValue,//验证的值
    			value:value//实际的值
    		}
    	);
    }

    //验证规则
    for (var i=0,v;v=validates[i++];) {
    	if(i==validates.length)v.isLast=true;
    	var _valid = await doValidate(v);
    	//如果当前规则验证不通过则直接返回 错误信息
    	if(_valid!== true ) {
        reject(_valid)
        return
      } ;
    }

    //全部验证通过则返回true
    resolve(true);
  })
}

/**
 * 执行校验
 * @param conf
 * @returns
 */
function doValidate (conf){
  return new Promise((resolve) => {
    var  _valid = true,
    	ruleName = conf.ruleName.toLowerCase(),// 规则名称
    	validValue = conf.validValue,//验证的值
    	value = conf.value;//实际的值

    var rule = FormValidator.rules[ruleName];

    if(!rule) {
      resolve(true)
    };

    // 验证规则如下：
    // email:true,url:true.
    //验证规则是boolean类型
    if (typeof validValue  === "boolean")
    	_valid = (!rule.rule(value,validValue) && validValue == true) ? false:true;
    else
    	_valid = rule.rule(value, validValue);

    //校验不通过时，返回错误信息
    if (!_valid){
    	var errMsg = FormValidator.format(rule.msg, validValue);
      resolve(errMsg)
    	return
    }

    /*if(conf.isLast && element.attr("desc")){
    	element.removeAttr("error-msg");
    }*/
    resolve(_valid)
  })
}
export default  {
  activeValidate
};
